using System;
using System.Collections;

namespace WillsTuringMachines.Simulators
{
	public interface ITuringMachineSimulator
	{
		/// <summary>
		/// Gets or sets the tape
		/// </summary>
		/// <value>
		/// The tape.
		/// </value>
		object[] Tape { get; set; }

		/// <summary>
		/// Gets or sets the current state of the simulation
		/// </summary>
		/// <value>
		/// The current state.
		/// </value>
		object State { get; set; }

		/// <summary>
		/// Gets or sets the index of the tapehead
		/// </summary>
		/// <value>
		/// The index of the tapehead.
		/// </value>
		UInt64 HeadIndex { get; set; }

		/// <summary>
		/// Given the currentState and currentSymbol, this function
		/// will populate the rest of ITuringMachineSimulatorData's fields
		/// </summary>
		/// <param name='data'>
		/// The data object to both read from and write to.
		/// </param>
		void Step(ITuringMachineSimulatorData data);

		//IDictionary ActionTable { get; set; }
	}
}

